// 终端实例
let terminal;
let fitAddon;
let webSocket;
let isConnected = false;

// 初始化终端
function initTerminal() {
    // 创建终端实例
    terminal = new Terminal({
        cursorBlink: true,
        cursorStyle: 'block',
        fontSize: 14,
        fontFamily: 'Consolas, "Courier New", monospace',
        theme: {
            background: '#1e1e1e',
            foreground: '#d4d4d4',
            cursor: '#ffffff',
            selection: '#264f78',
            black: '#000000',
            red: '#cd3131',
            green: '#0dbc79',
            yellow: '#e5e510',
            blue: '#2472c8',
            magenta: '#bc3fbc',
            cyan: '#11a8cd',
            white: '#e5e5e5',
            brightBlack: '#666666',
            brightRed: '#f14c4c',
            brightGreen: '#23d18b',
            brightYellow: '#f5f543',
            brightBlue: '#3b8eea',
            brightMagenta: '#d670d6',
            brightCyan: '#29b8db',
            brightWhite: '#e5e5e5'
        },
        cols: 80,
        rows: 24
    });

    // 添加插件
    fitAddon = new FitAddon.FitAddon();
    const webLinksAddon = new WebLinksAddon.WebLinksAddon();
    
    terminal.loadAddon(fitAddon);
    terminal.loadAddon(webLinksAddon);

    // 打开终端
    terminal.open(document.getElementById('terminal'));
    
    // 调整终端大小
    fitAddon.fit();

    // 显示欢迎信息
    showWelcomeMessage();

    // 监听窗口大小变化
    window.addEventListener('resize', () => {
        fitAddon.fit();
    });

    // 监听终端输入
    terminal.onData(data => {
        if (webSocket && webSocket.readyState === WebSocket.OPEN) {
            // 直接发送原始数据到WebSocket
            webSocket.send(data);
        }
    });
}

// 显示欢迎信息
function showWelcomeMessage() {
    const welcomeText = `
\r\n🐧 欢迎使用 Linux容器 Web终端\r\n
\r\n📋 使用说明：\r\n
\r\n  1. 点击 "🔗 连接SSH" 按钮连接到Linux容器\r\n
\r\n  2. 使用以下账户登录：\r\n
\r\n     👤 用户名: developer\r\n
\r\n     🔑 密码: dev123\r\n
\r\n  3. 登录后即可使用完整的Linux命令行环境\r\n
\r\n💡 提示：\r\n
\r\n  • 支持所有标准Linux命令\r\n
\r\n  • 支持文件编辑 (vim, nano)\r\n
\r\n  • 支持软件包管理 (apt)\r\n
\r\n  • 具有sudo权限\r\n
\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n
\r\n`;
    
    terminal.write(welcomeText);
}

// SSH连接信息
const SSH_HOST = '192.168.1.168';
const SSH_PORT = 2222;

// 连接SSH
function connectSSH() {
    if (isConnected) {
        terminal.write('\r\n⚠️  已经连接到服务器\r\n');
        return;
    }

    updateStatus('connecting', '连接中...');
    showLoading(true);
    
    terminal.clear();
    terminal.write('🔗 正在连接到SSH服务器 192.168.1.168:2222...\r\n');
    
    // 直接建立WebSocket连接
    connectWebSocket();
}

// 检查SSH服务器连接状态
async function checkSSHStatus() {
    try {
        // 这里可以添加检查SSH服务器状态的逻辑
        return true;
    } catch (error) {
        return false;
    }
}

// 建立WebSocket连接
function connectWebSocket() {
    const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
    // 使用当前页面的主机地址建立WebSocket连接
    const wsUrl = `${protocol}//${window.location.host}/test`;
    
    webSocket = new WebSocket(wsUrl);
    
    webSocket.onopen = function() {
        terminal.write('✅ WebSocket连接建立成功\r\n');
        terminal.write('🐧 正在启动Linux终端...\r\n\r\n');
        
        isConnected = true;
        updateStatus('connected', '已连接');
        showLoading(false);
        
        // 发送初始化命令
        setTimeout(() => {
            terminal.write('root@container:~# ');
        }, 1000);
    };
    
    webSocket.onmessage = function(event) {
        // 接收服务器数据并显示在终端
        terminal.write(event.data);
    };
    
    webSocket.onclose = function() {
        terminal.write('\r\n🔌 WebSocket连接已断开\r\n');
        isConnected = false;
        updateStatus('disconnected', '未连接');
        showLoading(false);
    };
    
    webSocket.onerror = function(error) {
        terminal.write('\r\n❌ WebSocket连接错误\r\n');
        console.error('WebSocket error:', error);
        isConnected = false;
        updateStatus('disconnected', '连接错误');
        showLoading(false);
    };
}

// 显示登录成功信息（已移除，由实际SSH处理）
// 设置命令行交互（已移除，由实际SSH处理）
            
// 模拟命令执行已移除，现在使用真实的SSH连接

// 断开连接
function disconnect() {
    if (webSocket) {
        webSocket.close();
    }
    
    isConnected = false;
    updateStatus('disconnected', '未连接');
    showLoading(false);
    
    terminal.clear();
    terminal.write('🔌 连接已断开\r\n\r\n');
    showWelcomeMessage();
}



// 清屏
function clearTerminal() {
    terminal.clear();
    if (isConnected) {
        terminal.write('developer@linux-basic:~$ ');
    } else {
        showWelcomeMessage();
    }
}

// 更新连接状态
function updateStatus(status, text) {
    const statusElement = document.getElementById('status');
    statusElement.className = `status ${status}`;
    statusElement.textContent = text;
}

// 显示/隐藏加载动画
function showLoading(show) {
    const loadingElement = document.getElementById('loading');
    const terminalElement = document.getElementById('terminal');
    
    if (show) {
        loadingElement.classList.add('show');
        terminalElement.style.opacity = '0.3';
    } else {
        loadingElement.classList.remove('show');
        terminalElement.style.opacity = '1';
    }
}

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', () => {
    initTerminal();
    
    // 检查SSH服务器状态
    checkSSHServerStatus();
});

// 检查SSH服务器状态
function checkSSHServerStatus() {
    // 检查SSH服务器是否可用
    checkSSHStatus()
        .then(isAvailable => {
            if (isAvailable) {
                terminal.write(`\r\n✅ SSH服务器 ${SSH_HOST}:${SSH_PORT} 可用\r\n\r\n`);
            } else {
                terminal.write(`\r\n⚠️ SSH服务器 ${SSH_HOST}:${SSH_PORT} 不可用\r\n\r\n`);
            }
        })
        .catch(error => {
            terminal.write(`\r\n❌ SSH服务器 ${SSH_HOST}:${SSH_PORT} 连接失败\r\n\r\n`);
        });
}

// 键盘快捷键
document.addEventListener('keydown', (e) => {
    // Ctrl+C 清屏
    if (e.ctrlKey && e.key === 'c') {
        e.preventDefault();
        if (isConnected) {
            terminal.write('^C\r\ndeveloper@linux-basic:~$ ');
        }
    }
    
    // Ctrl+D 断开连接
    if (e.ctrlKey && e.key === 'd') {
        e.preventDefault();
        if (isConnected) {
            disconnect();
        }
    }
});